Security News
Input Validation Vulnerabilities Dominate MITRE's 2024 CWE Top 25 List
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
@spectrum-web-components/theme
Advanced tools
`sp-theme` sets the rendering theme for all child components, and also sets a number of default sizes & colors for any child content. The Spectrum design system provides four color themes (`lightest`, `light`, `dark`, and `darkest`) and two different scal
sp-theme
sets the rendering theme for all child components, and also sets a number of default sizes & colors for any child content. The Spectrum design system provides four color themes (lightest
, light
, dark
, and darkest
) and two different scales (medium
and large
) to support desktop & mobile UI.
yarn add @spectrum-web-components/theme
Import the side effectful registration of <sp-theme>
via:
import '@spectrum-web-components/theme/sp-theme.js';
When looking to leverage the Theme
base class as a type and/or for extension purposes, do so via:
import { Theme } from '@spectrum-web-components/theme';
The various themes can be imported en masse:
import '@spectrum-web-components/theme/src/themes.js';
Or, individually:
import '@spectrum-web-components/theme/theme-darkest.js';
import '@spectrum-web-components/theme/theme-dark.js';
import '@spectrum-web-components/theme/theme-light.js';
import '@spectrum-web-components/theme/theme-lightest.js';
import '@spectrum-web-components/theme/scale-medium.js';
import '@spectrum-web-components/theme/scale-large.js';
import '@spectrum-web-components/theme/sp-theme.js';
import '@spectrum-web-components/theme/src/themes.js';
The above import will get you started using the <sp-theme>
wrapper element, and includes all four (4) color options (lightest
, light
, dark
, and darkest
) and both (2) scale options (medium
and large
). Having all of these options available together is the easiest way to get a handle on the theming possibilities offered by the package and empower you to prototype and test various deliveries of your application. However, reserving the download and parse time for all of the variants may not be required for all applications. See "Advanced usage" below for instructions on tuning the performance of an application that leverages this package.
Once you've moved beyond the prototype phases of an application, it is likely that you will only use one combinatin of color
and scale
in your application, and even when you don't you will likely benefit from lazily loading variants that you don't leverage by default. For single combination applications or to power a default theme, the following imports can be used to ensure only the code your application requires is loaded:
// Power a site using <sp-theme color="darkest" scale="large">
import '@spectrum-web-components/theme/theme-darkest.js';
import '@spectrum-web-components/theme/scale-large.js';
import '@spectrum-web-components/theme/sp-theme.js';
When subsequent theme variants are needed you can ensure those are lazily loaded by leveraging dynamic imports via something like the following:
const themeElement = document.querySelector('sp-theme');
const updateTheme = async (color, scale) => {
Promise.all([
import(`@spectrum-web-components/theme/theme-${color}.js`),
import(`@spectrum-web-components/theme/scale-${scale}.js`),
]).then(() => {
themeElement.color = color;
themeElement.scale = scale;
});
};
updateTheme('light', 'medium');
When bundling your application, be sure to consult the documentation of your bundler for the correct way to ensure proper packaging of the sort of programattic dependancy graph that this will create.
<style type="text/css">
#example {
max-width: 500px;
padding: 3em;
background-color: var(--spectrum-global-color-gray-100);
color: var(--spectrum-global-color-gray-800);
}
#buttons {
margin-top: 2em;
}
</style>
<sp-theme color="light">
<div id="example">
<div>
<sp-slider
value="5"
step="1"
min="1"
max="11"
label="Volume"
id="volume-slider"
></sp-slider>
</div>
<div><sp-switch>Overdrive</sp-switch></div>
<div id="buttons">
<sp-button variant="primary">Cancel</sp-button>
<sp-button variant="cta">Continue</sp-button>
</div>
</div>
</sp-theme>
<style type="text/css">
#example {
max-width: 500px;
padding: 3em;
background-color: var(--spectrum-global-color-gray-100);
color: var(--spectrum-global-color-gray-800);
}
#buttons {
margin-top: 2em;
}
</style>
<sp-theme color="dark">
<div id="example">
<div>
<sp-slider
value="5"
step="1"
min="1"
max="11"
label="Volume"
id="volume-slider"
></sp-slider>
</div>
<div><sp-switch>Overdrive</sp-switch></div>
<div id="buttons">
<sp-button variant="primary">Cancel</sp-button>
<sp-button variant="cta">Continue</sp-button>
</div>
</div>
</sp-theme>
The large scale of <sp-theme>
will switch to using Spectrum's larger mobile Platform Scale
<style type="text/css">
#example {
max-width: 500px;
padding: 1em;
background-color: var(--spectrum-global-color-gray-100);
color: var(--spectrum-global-color-gray-800);
}
#buttons {
margin-top: 2em;
}
</style>
<sp-theme color="darkest" scale="large">
<div id="example">
<div>
<sp-slider
value="5"
step="1"
min="1"
max="11"
label="Volume"
id="volume-slider"
></sp-slider>
</div>
<div><sp-switch>Overdrive</sp-switch></div>
<div id="buttons">
<sp-button variant="primary">Cancel</sp-button>
<sp-button variant="cta">Continue</sp-button>
</div>
</div>
</sp-theme>
There are a few cases where it is necessary to embed one theme within another. For example, if you have an application that is using a dark theme that is previewing or editing content that will be displayed in a light theme.
<style type="text/css">
#outer {
max-width: 500px;
padding: 1em;
background-color: var(--spectrum-global-color-gray-100);
color: var(--spectrum-global-color-gray-800);
}
#inner {
margin-top: 2em;
padding: 1em;
background-color: var(--spectrum-global-color-gray-100);
color: var(--spectrum-global-color-gray-800);
}
#buttons {
margin-top: 2em;
}
</style>
<sp-theme color="dark">
<div id="outer">
<div>
<sp-slider
value="5"
step="1"
min="1"
max="11"
label="Volume"
id="volume-slider"
></sp-slider>
</div>
<div><sp-switch>Overdrive</sp-switch></div>
<div id="buttons">
<sp-button variant="primary">Cancel</sp-button>
<sp-button variant="cta">Continue</sp-button>
</div>
<sp-theme color="light">
<div id="inner">
<div>
<sp-slider
value="5"
step="1"
min="1"
max="11"
label="Volume"
id="volume-slider"
></sp-slider>
</div>
<div><sp-switch>Overdrive</sp-switch></div>
<div id="buttons">
<sp-button variant="primary">Cancel</sp-button>
<sp-button variant="cta">Continue</sp-button>
</div>
</div>
</sp-theme>
</div>
</sp-theme>
FAQs
`sp-theme` applies a Spectrum theme by using CSS custom properties to set default sizes & colors for all of the components in its scope. The Spectrum design system provides four color themes (`lightest`, `light`, `dark`, and `darkest`) and two different s
The npm package @spectrum-web-components/theme receives a total of 9,546 weekly downloads. As such, @spectrum-web-components/theme popularity was classified as popular.
We found that @spectrum-web-components/theme demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.
Research
Security News
A threat actor's playbook for exploiting the npm ecosystem was exposed on the dark web, detailing how to build a blockchain-powered botnet.